home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 2.2 / fibonacci.st < prev    next >
Text File  |  1993-07-24  |  2KB  |  55 lines

  1. "    NAME        fibonacci
  2.     AUTHOR        TPH@cs.man.ac.uk
  3.     FUNCTION serial & parallel versions 
  4.     ST-VERSIONS    2.2
  5.     PREREQUISITES    Parallelism 
  6.     CONFLICTS    
  7.     DISTRIBUTION      world
  8.     VERSION        1.1
  9.     DATE    22 Jan 1989
  10. SUMMARY    fibonacci
  11.     contains both a serial and a parallel version of a
  12.    fibonacci number method for class Integer.  To make the parallel
  13.    version work, you should have filed in Parallelism.st first.(2.2). TPH
  14. "!
  15. 'From Smalltalk-80, Version 2.2 of July 4, 1987 on 26 November 1987 at 11:23:06 am'!
  16.  
  17.  
  18.  
  19. !BlockContext methodsFor: 'parallel evaluation'!
  20.  
  21. parallelAdd: aBlock 
  22.     "Executes the receiver in parallel with aBlock. Once both   
  23.      have completed, perform an ADD operation."
  24.  
  25.     | first second |
  26.     first _ self futureValue.
  27.     second _ aBlock futureValue.
  28.     ^first touch + second touch! !
  29.  
  30. 'From Smalltalk-80, Version 2.2 of July 4, 1987 on 25 November 1987 at 4:40:55 pm'!
  31.  
  32.  
  33.  
  34. !Integer methodsFor: 'mathematical functions'!
  35.  
  36. fibonacci
  37.     "Recursively generate fibonacci number of receiver."
  38.  
  39.     self <= 1 ifTrue:[^1]
  40.                   ifFalse:[^(self - 1) fibonacci + (self - 2) fibonacci + 1]
  41.  
  42.     "Transcript cr; show: 20 fibonacci printString."
  43.     "Transcript cr; show: (Time millisecondsToRun: [20 fibonacci]) printString."!
  44.  
  45. parallelFibonacci
  46.     "Recursively generate fibonacci number of receiver.  Use an
  47.      explicit parallel algorithm."
  48.  
  49.     self <= 1 ifTrue:[^1]
  50.                   ifFalse:[^[(self - 1) parallelFibonacci] parallelAdd:
  51.                         [(self - 2) parallelFibonacci + 1]]
  52.  
  53.     "Transcript cr; show: 20 parallelFibonacci printString."
  54.     "Transcript cr; show: (Time millisecondsToRun: [20 parallelFibonacci]) printString."! !
  55.